package B3;

import java.util.ArrayList;
import java.util.List;

public class StringExtractor {

    public static List<String> extractStrings(String sourceCode) {
        List<String> strings = new ArrayList<>();
        StringBuilder currentString = new StringBuilder();
        boolean inString = false; // 标记是否在字符串内部
        boolean escapeNext = false; // 标记下一个字符是否被转义

        for (int i = 0; i < sourceCode.length(); i++) {
            char ch = sourceCode.charAt(i);

            if (escapeNext) {
                // 如果上一个字符是反斜杠，则当前字符被转义
                currentString.append(ch);
                escapeNext = false; // 重置转义状态
            } else {
                if (ch == '\\') {
                    // 遇到反斜杠，设置转义状态
                    escapeNext = true;
                } else if (ch == '\"') {
                    // 遇到双引号
                    if (inString) {
                        // 如果已经在字符串内部，结束字符串并保存
                        strings.add(currentString.toString());
                        currentString.setLength(0); // 清空当前字符串
                    }
                    inString = !inString; // 切换字符串状态
                } else if (inString) {
                    // 如果在字符串内部，添加字符到当前字符串
                    currentString.append(ch);
                }
            }
            // 调试信息

        }

        return strings;
    }

    public static void main(String[] args) {
        // 示例源代码
        String sourceCode = "一般学习一门编程语言的时候，基本上第一个程序是输出\"Hello World!\"";
        List<String> extractedStrings = extractStrings(sourceCode);
        System.out.println(extractedStrings); // 输出提取的字符串
    }
}
